Repository navigation
feat(prx): declare the missing libSceAppInstUtil and libSceAudioIn exports - #12539
Conversation
Progress report (90c9759 → a249841)📉 System libraries: 43.19% (-0.02%, +7 declared functions) 🆕 7 declared as stubs
Changed libraries (implemented exports)
|
MarcZX10
left a comment
There was a problem hiding this comment.
Reviewed — changes requested
The 13 new exported functions have definitions but no declarations in either library's public headers, so the required public_headers audit fails on this head.
What I ran
Reviewed head 4792cc3607c3dbc19383c853bd2111844d66c55e against current main 319621ba2e578bd053b0baba2877fe70520e0737; the merge tree is clean. Environment: Debian 12 x86_64, Python 3.11. I ran the repository's public_headers audit on both the PR head and its base as a negative control, and inspected the two public headers and the relevant contribution rule.
git diff --check refs/review/current-main...refs/review/12539
git merge-tree --write-tree refs/review/current-main refs/review/12539
python3 core/libs/tests/test_public_headers.py --audit-onlyThe audit command was run from /dev/shm/AnyPS5-review-12539 at the PR head and /dev/shm/AnyPS5-base-12539 at the base.
Results
| Check | Result |
|---|---|
Merge with current main |
Clean |
| Diff check | Passed; no output |
Base public_headers audit |
Passed: 369 libraries, 13,071 exports |
PR-head public_headers audit |
Failed: all 13 newly defined exports have zero header declarations |
| Hosted conventions, eligibility, intake, labels, report | Passed |
| Hosted Windows | Job passed, but test selection and CTest were skipped; host-only test executables linked |
| Hosted Linux, register-context, relinker, ASan, write-watch | Skipped by workflow |
Raw output
8421c132edbe9d521e10fbef6856547a8f7233e0
369 libraries, 13071 exports: unique declarations and umbrella coverage verified
RuntimeError: sceAppInstUtilAppInstallCloudGame: expected exactly one header declaration; found 0:
sceAppInstUtilAppInstallRequestAddcontFromDisc: expected exactly one header declaration; found 0:
sceAppInstUtilAppInstallMediaPlayer: expected exactly one header declaration; found 0:
sceAppInstUtilAppSetSavedataUploadStatus: expected exactly one header declaration; found 0:
sceAppInstUtilAppGetCustomThemeInfo: expected exactly one header declaration; found 0:
sceAppInstUtilAppConvertAppDiscToDownload: expected exactly one header declaration; found 0:
sceAppInstUtilAppGetInstallAddcontFromDiscStatus: expected exactly one header declaration; found 0:
sceAudioInExtOpen: expected exactly one header declaration; found 0:
sceAudioInExtSetAecMode: expected exactly one header declaration; found 0:
sceAudioInSetFocusForUser: expected exactly one header declaration; found 0:
sceAudioInExtClose: expected exactly one header declaration; found 0:
sceAudioInSetConnectionsForUser: expected exactly one header declaration; found 0:
sceAudioInExtInput: expected exactly one header declaration; found 0:
Hosted Windows job output:
Link changed host-only core/libs test executables success
Run cmake --build build --target libs skipped
Run python tools/select_tests.py ctest build --output-on-failure --timeout 120 --parallel 4 --output-log ctest.log --output-junit ctest.xml skipped
Negative control
| Assertion | Change made to code under test | Did the new test fail? |
|---|---|---|
Each exported APS5_VABI function has exactly one declaration in a public header reachable through its library umbrella. |
Ran the same audit on base 319621ba2e578bd053b0baba2877fe70520e0737, then on PR head 4792cc3607c3dbc19383c853bd2111844d66c55e. |
Base passed; PR head failed for all 13 new functions. |
Findings
Blocking: CONTRIBUTING.md requires every exported APS5_VABI function to have exactly one declaration in a header reachable through its library umbrella. libSceAppInstUtil/include/Api.hpp and libSceAudioIn/include/AudioIn.hpp contain none of these new declarations. Add one declaration for each export in its library's public header, following the repository-approved convention for signatures whose prototypes remain unknown, and keep the technical-debt entries explicit that callers must not rely on an unverified ABI. Then rerun public_headers and header compilation.
Non-blocking: The hosted Windows job linked changed host-only targets but skipped CTest, which is why its green result does not cover this public-header audit failure.
Sources
- Public-header requirement at the reviewed base
- Audit implementation at the reviewed base
- New AppInstUtil definitions at the reviewed head
- AppInstUtil public header at the reviewed head
- New AudioIn definitions at the reviewed head
- AudioIn public header at the reviewed head
Not verified
I did not independently validate all 13 NIDs against console exports or the pinned aerolib database, and I did not build either full library locally. Their hosted Windows build steps linked the changed host-only test targets but skipped the full library build and CTest.
To get this to a good state
Add the required public declarations in the two headers and rerun python3 core/libs/tests/test_public_headers.py --audit-only plus the public-header compile test. I will rerun those checks on the updated head.
4792cc3 to
50513e0
Compare
… in their public headers Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…s pending NIDs Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
50513e0 to
a249841
Compare
|
Thanks. The full Linux build failed on this head: Added on your branch: dropped the libSceAudioIn part (Export.cpp, header declarations, debt line). The 7 libSceAppInstUtil declarations stay; none of their NIDs is exported elsewhere, and the public-headers audit passes (373 libraries, 14246 exports); merged. |
What
Declares 13 PS5 3.20 system exports that AnyPS5 does not provide, across 2 libraries:
libSceAppInstUtil(7) andlibSceAudioIn(6).AnyPS5 resolves a title's imports by NID, so a title that imports a system function that no AnyPS5 library provides fails to load with an unresolved import. Declaring them as throwing stubs lets those titles load and reach their next blocker.
Every declaration calls
NotImplemented_nid_no_patchand returns 0; none of them implements the function. All 13 are declared without parameters, which resolves the import without making an ABI claim. The technical-debt files record the limitation per library.The list is the intersection of the export table of the console's library (function symbols only), the pinned aerolib names and the functions not yet defined anywhere in the repo (verified per symbol with
tools/nid_names.py). It was computed withtools/export_gap.py(#8588), which recognises what a module already provides through anAPS5_VABIdeclaration, a_nid_postfixname, anAPS5_EXPORTbinding or a macro, and which reports the missing exports whose name the module calls itself.tools/pr_overlap.pyreports no shared export with any open pull request.tools/progress.pyreports system libraries changing from 6653/14205 (46.84%) to 6653/14218 (46.79%). These are pending declarations, so the implemented count is unchanged.Tested
CachyOS Linux, kernel 7.2.9-2-cachyos, GCC 16.2.1, CMake 3.31.6, Ninja 1.12.1, Release build.
cmake --build build --target libSceAppInstUtil libSceAudioIn: builds and links cleanly.python3 tools/check_conventions.py --base origin/main: all conventions checks passed.git diff --check: clean.Checklist
main; no other open PR implements the same functionsNotImplemented_nid_no_patch); silent stubs are listed under Silent stubs in their library's technical debt file.mdfiles or images added to the repository (attach them to this PR)